package shujia.day12.ketang;

import java.io.FileInputStream;

/*
    异常处理的方式：
        1、try...catch...【最终的处理方式】
        2、throws【仅为了程序能够通过编译】


    try...catch....

        注意：
            1、try中的代码只要遇到异常，try中的其他代码不执行，直接进入到匹配catch的过程
            2、如果没有对应的catch能够匹配，那么就说明该异常没有被处理，就由jvm默认处理了。
            3、新版本的新写法，可以直接写一个catch，将多个异常类型使用|分割，缺点：多种异常的处理方案统一
            4、只要是XxxException.一定是Exception子类,新版本的新写法中，异常类之间，不能存在继承关系
            5、若写多个catch接收的话，异常类可以存在继承关系，但是父类必须写在后面
            6、如果一个运行过程出现的问题，大概率是运行时期异常父类中一定会继承RuntimeException
                而一般情况下，运行时期异常都是由于代码不够严谨导致的，可以通过提高代码逻辑严谨进行规避
                也可以使用try...catch处理运行时期异常
            7、如果一段代码，还没运行，就直接报错了，大概率是编译时期异常，父类直接继承自Exception
                而编译时期异常必须要使用try...catch...进行处理

 */
public class ExceptionDemo2 {
    public static void main(String[] args) {
        int[] arr = {11, 22, 33};
//        try {
//            System.out.println(arr[6]); // ArrayIndexOutOfBoundsException
//            String s = null;
//            System.out.println(s.length()); // NullPointerException
//        }catch (ArrayIndexOutOfBoundsException e){ //ArrayIndexOutOfBoundsException e = new ArrayIndexOutOfBoundsException()
//            System.out.println("出错啦！！数组索引越界异常");
//        }catch (NullPointerException e){ // NullPointerException e = new NullPointerException();
//            System.out.println("出错啦！！空指针异常");
//        }

//        try {
//            System.out.println(arr[1]); // ArrayIndexOutOfBoundsException
//            String s = null;
//            System.out.println(s.length()); // NullPointerException
//        }catch (NullPointerException | ArrayIndexOutOfBoundsException e){ //ArrayIndexOutOfBoundsException e = new ArrayIndexOutOfBoundsException()
//            System.out.println("出错啦！！");
//        }

//        try {
//            System.out.println(arr[1]); // ArrayIndexOutOfBoundsException
//            String s = null;
//            System.out.println(s.length()); // NullPointerException
//        }catch (Exception e){ //Exception e = new ArrayIndexOutOfBoundsException()
//            System.out.println("出错啦！！");
//        }

//        try {
//            System.out.println(arr[6]); // ArrayIndexOutOfBoundsException
//            String s = null;
//            System.out.println(s.length()); // NullPointerException
//        } catch (ArrayIndexOutOfBoundsException e) { //ArrayIndexOutOfBoundsException e = new ArrayIndexOutOfBoundsException()
//            System.out.println("出错啦！！数组索引越界异常");
//        } catch (NullPointerException e) { // NullPointerException e = new NullPointerException();
//            System.out.println("出错啦！！空指针异常");
//        } catch (Exception e){
//            System.out.println("其他错误！！");
//        }

        //编译时期异常，代码无法通过编译，必须通过try..catch处理
//        FileInputStream fis = new FileInputStream("xx/xx");
//        try {
//            FileInputStream fis = new FileInputStream("xx/xx");
//        }catch (Exception e){
//            System.out.println("出错啦");
//        }



        System.out.println("over");
    }
}
